#pragma once
#include<vector>
#include<array>
using namespace std;

template<class T>
void testFunc(T a);



template<class T ,class Y>
class Myclass
{
public:
private:
	T _val1;
	Y _val2;
};

template<class T, class Y>
class Myclass<T*, Y* >
{
public:
private:
	T _val1;
	Y _val2;
};

template<class T, class Y>
class Myclass<T& ,Y& >
{
public:
private:
	T _val1;
	Y _val2;
};


template<class T>
class Myclass<T,double>
{
public:
private:
	T _val1;
	double _val2;
};

template<>
class Myclass<int, double>
{
public:
private:
	int _val1;
	double _val2;
};







template<class T , int size = 10>
class Array
{
public:
	void SecretWeapon()
	{
		obj.push_back(666);
	}
private:
	array<T, size> obj;
};

template<class Container>
void PrintContainer(const Container& obj)
{
	typename Container::const_iterator it = obj.begin();
	//auto iterator it = obj.begin();
	while (it != obj.end())
	{
		cout << *it << " ";
		it++;
	}
}
template<class T>
class myclass
{
public:
	template<class Y>
	Y add(Y val)
	{
		return _val1 + _val2 + val;
	}
private:
	T _val1;
	T _val2;
};



template<class T , class Y>
Y add(T left, Y right)
{
	return left + right;
}

template<>
double add<int,double>(int left, double right)
{
	return left + right;
}

